﻿#include "lvgl_clock_style2.h"


__lvgl_clock_style2_data lvgl_clock_style2_data;
//  = {
//     .cont_main = NULL,
//     .task = NULL,
//     .anim_in = NULL,
//     .anim_out = NULL,
//     .anim_path_in = NULL,
//     .anim_path_out = NULL,

//     .close_task = NULL,
//     .close_flag = false,
//     .close_count = 0,
//     .close_num = 0,
// };

static void lvgl_clock_style2_anim_select_start(int targetpos);
static void lvgl_clock_style2_anim_out_start(int mode, int time);
static void lvgl_clock_style2_anim_select_ready_cb(lv_anim_t* anim);

void lvgl_clock_style2_task_cb(lv_task_t* t)
{

    static uint8_t flag = 0;

#if USE_WIN
    static uint16_t t0=0;
    if(++t0>2)
    {
        t0 = 0;
        lvgl_clock_style2_data.sec += 1;
        if (lvgl_clock_style2_data.sec >= 60)
        {
            lvgl_clock_style2_data.sec = 0;

            lvgl_clock_style2_data.min += 1;
            if (lvgl_clock_style2_data.min >= 60)
            {
                lvgl_clock_style2_data.min = 0;
                lvgl_clock_style2_data.hour += 1;
                if (lvgl_clock_style2_data.hour >= 24)
                    lvgl_clock_style2_data.hour = 1;
            }
        }
    }


#endif

    flag = !flag;
    if(flag)
    {
        lvgl_set_obj_hide(&lvgl_clock_style2_data.image1);
    }else
    {
        lvgl_set_obj_show(&lvgl_clock_style2_data.image1);
    }

    memset(lvgl_clock_style2_data.p_buf,0x00,100);
    sprintf(lvgl_clock_style2_data.p_buf,"%02d  %02d",lvgl_clock_style2_data.hour,lvgl_clock_style2_data.min);

    lvgl_clock_style2_set_time(lvgl_clock_style2_data.p_buf);
}
void lvgl_clock_style2_close_task_cb(lv_task_t* t)
{
    static uint8_t cnt = 0;
    if (lvgl_clock_style2_data.close_flag == true)
    {

        if (++cnt >= lvgl_clock_style2_data.close_count)
        {
            cnt = 0;
            lvgl_clock_style2_data.close_flag = false;
            lvgl_task_delete(&lvgl_clock_style2_data.close_task);

            if(lvgl_clock_style2_data.close_num == 0)
            {
                lvgl_clock_style2_anim_out_start(0, 350);

            }else
            if(lvgl_clock_style2_data.close_num == 1)
            {
                lvgl_clock_style2_anim_out_start(0, 350);
            }else
            if(lvgl_clock_style2_data.close_num == 2)
            {
                lvgl_clock_style2_anim_out_start(0, 250);
            }

        }

    }

}



void lvgl_clock_style2_anim_in_cb(void* arc, lv_anim_value_t v)
{
    lv_obj_set_y(arc, v);
}

void lvgl_clock_style2_anim_in_ready_cb(lv_anim_t* anim)
{

    lvgl_clock_style2_debug("---------anim in ready---------");

    lv_anim_del(&lvgl_clock_style2_data.anim_in,NULL);

    lv_obj_set_pos(lvgl_clock_style2_data.cont_main, 0, 0);

    lvgl_group_add_obj(&lvgl_clock_style2_data.cont_main);
    lvgl_group_focus_obj(&lvgl_clock_style2_data.cont_main);

}

void lvgl_clock_style2_anim_in_start(int mode, int time)
{
#if LVGL_ANIM_SWITCH

    lvgl_clock_style2_debug("---------anim in start---------");

    lv_anim_path_init(&lvgl_clock_style2_data.anim_path_in);
    lv_anim_path_set_cb(&lvgl_clock_style2_data.anim_path_in, lv_anim_path_ease_out);
    //lv_anim_path_linear线性动画
    //lv_anim_path_step最后一步更改
    //lv_anim_path_ease_in开头很慢
    //lv_anim_path_ease_out最后慢
    //lv_anim_path_ease_in_out在开始和结束时也很慢
    //lv_anim_path_overshoot超出最终值
    //lv_anim_path_bounce从最终值反弹一点（就像撞墙一样）



    lv_anim_init(&lvgl_clock_style2_data.anim_in);


    lv_anim_set_exec_cb(&lvgl_clock_style2_data.anim_in, lvgl_clock_style2_anim_in_cb);
    lv_anim_set_ready_cb(&lvgl_clock_style2_data.anim_in, lvgl_clock_style2_anim_in_ready_cb);
    lv_anim_set_values(&lvgl_clock_style2_data.anim_in, lv_obj_get_y(lvgl_clock_style2_data.cont_main),0);
    lv_anim_set_time(&lvgl_clock_style2_data.anim_in, 300);
    lv_anim_set_var(&lvgl_clock_style2_data.anim_in, lvgl_clock_style2_data.cont_main);

    lv_anim_set_path(&lvgl_clock_style2_data.anim_in, &lvgl_clock_style2_data.anim_path_in);
    lv_anim_start(&lvgl_clock_style2_data.anim_in);

#else


    lvgl_clock_style2_anim_in_ready_cb(NULL);

#endif




}


void lvgl_clock_style2_anim_out_cb(void* arc, lv_anim_value_t v)
{
    lv_obj_set_y(arc, v);
}
void lvgl_clock_style2_anim_out_ready_cb(lv_anim_t* anim)
{

    lvgl_clock_style2_debug("---------anim out ready---------");

    lv_anim_del(&lvgl_clock_style2_data.anim_out,NULL);
    lvgl_clock_style2_close();

}

static void lvgl_clock_style2_anim_out_start(int mode, int time)
{

    lvgl_group_remove_obj(&lvgl_clock_style2_data.cont_main);

#if LVGL_ANIM_SWITCH

    lvgl_clock_style2_debug("---------anim out start---------");

    lv_anim_path_init(&lvgl_clock_style2_data.anim_path_out);
    lv_anim_path_set_cb(&lvgl_clock_style2_data.anim_path_out, lv_anim_path_ease_in);
    //lv_anim_path_linear线性动画
    //lv_anim_path_step最后一步更改
    //lv_anim_path_ease_in开头很慢
    //lv_anim_path_ease_out最后慢
    //lv_anim_path_ease_in_out在开始和结束时也很慢
    //lv_anim_path_overshoot超出最终值
    //lv_anim_path_bounce从最终值反弹一点（就像撞墙一样）



    lv_anim_init(&lvgl_clock_style2_data.anim_out);


    lv_anim_set_exec_cb(&lvgl_clock_style2_data.anim_out, lvgl_clock_style2_anim_out_cb);
    lv_anim_set_ready_cb(&lvgl_clock_style2_data.anim_out, lvgl_clock_style2_anim_out_ready_cb);
    lv_anim_set_values(&lvgl_clock_style2_data.anim_out, lv_obj_get_y(lvgl_clock_style2_data.cont_main), lv_obj_get_height(lv_scr_act()));
    lv_anim_set_time(&lvgl_clock_style2_data.anim_out, time);
    lv_anim_set_var(&lvgl_clock_style2_data.anim_out, lvgl_clock_style2_data.cont_main);

    lv_anim_set_path(&lvgl_clock_style2_data.anim_out, &lvgl_clock_style2_data.anim_path_out);
    lv_anim_start(&lvgl_clock_style2_data.anim_out);

#else


    lvgl_clock_style2_anim_out_ready_cb(NULL);

#endif

}


void lvgl_clock_style2_event_cb(struct _lv_obj_t* obj, lv_event_t event)
{
        if (obj == lvgl_clock_style2_data.cont_main)
        {

            //lvgl_clock_style2_debug("cb:%d", event);
            switch (event)
            {
            case LV_EVENT_KEY:

                switch (*(const uint32_t*)lv_event_get_data())
                {
                case LV_KEY_UP:
                    lvgl_clock_style2_debug("LV_KEY_UP");

                    break;
                case LV_KEY_DOWN:
                    lvgl_clock_style2_debug("LV_KEY_DOWN");

                    break;
                case LV_KEY_LEFT:
                    lvgl_clock_style2_debug("LV_KEY_LEFT");
                    if(--lvgl_clock_style2_data.style_num<0)
                    {
                        lvgl_clock_style2_data.style_num = 2;
                    }

                    lvgl_clock_style2_data.close_flag = true;
                    lvgl_clock_style2_data.close_count = 1;
                    lvgl_clock_style2_data.close_num = 2;
                    lvgl_task_create(&lvgl_clock_style2_data.close_task, lvgl_clock_style2_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);


                    //lvgl_clock_style2_set_style(lvgl_clock_style2_data.style_num);
                    break;
                case LV_KEY_RIGHT:

                    if(++lvgl_clock_style2_data.style_num>2)
                    {
                        lvgl_clock_style2_data.style_num = 0;
                    }
                    lvgl_clock_style2_data.close_flag = true;
                    lvgl_clock_style2_data.close_count = 1;
                    lvgl_clock_style2_data.close_num = 2;
                    lvgl_task_create(&lvgl_clock_style2_data.close_task, lvgl_clock_style2_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);

                    //lvgl_clock_style2_set_style(lvgl_clock_style2_data.style_num);

                    break;
                case LV_KEY_ESC:
                    lvgl_clock_style2_debug("LV_KEY_ESC");

                    lvgl_clock_style2_data.close_flag = true;
                    lvgl_clock_style2_data.close_count = 1;
                    lvgl_clock_style2_data.close_num = 0;
                    lvgl_task_create(&lvgl_clock_style2_data.close_task, lvgl_clock_style2_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);

                    break;
                case LV_KEY_DEL:
                    lvgl_clock_style2_debug("LV_KEY_DEL");

                    break;
                case LV_KEY_BACKSPACE:
                    lvgl_clock_style2_debug("LV_KEY_BACKSPACE");

                    break;
                case LV_KEY_ENTER:
                    lvgl_clock_style2_debug("LV_KEY_ENTER");

                    lvgl_clock_style2_data.close_flag = true;
                    lvgl_clock_style2_data.close_count = 1;
                    lvgl_clock_style2_data.close_num = 1;
                    lvgl_task_create(&lvgl_clock_style2_data.close_task, lvgl_clock_style2_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);



                    break;
                case LV_KEY_NEXT:
                    lvgl_clock_style2_debug("LV_KEY_NEXT");

                    break;
                case LV_KEY_PREV:
                    lvgl_clock_style2_debug("LV_KEY_PREV");

                    break;
                case LV_KEY_HOME:
                    lvgl_clock_style2_debug("LV_KEY_HOME");

                    break;
                case LV_KEY_END:
                    lvgl_clock_style2_debug("LV_KEY_END");

                    break;


                }

                break;



            case LV_EVENT_DELETE:

                lvgl_clock_style2_data.cont_main = NULL;
                lvgl_clock_style2_debug("delete win");
                break;

            case LV_EVENT_PRESSING://对象被持续按下

                break;
            case LV_EVENT_PRESSED://对象已被按下

                break;
            case LV_EVENT_DRAG_END://拖动结束后

                if (lv_obj_get_x(lvgl_clock_style2_data.cont_main) != 0)
                {
                    lv_obj_set_x(lvgl_clock_style2_data.cont_main, 0);
                }

                if (lv_obj_get_y(lvgl_clock_style2_data.cont_main) != 0)
                {
                    lv_obj_set_y(lvgl_clock_style2_data.cont_main, 0);
                }
                break;
            case LV_EVENT_RELEASED://按钮释放

            case LV_EVENT_LONG_PRESSED://按钮长按

                break;

            default:
                break;
            }
        }
}


void lvgl_clock_style2_create(lv_obj_t* parent)
{
    if (lvgl_clock_style2_data.cont_main == NULL)
    {

        //----创建容器----//
        lvgl_clock_style2_data.cont_main = lv_cont_create(parent, NULL);

        lv_obj_set_size(lvgl_clock_style2_data.cont_main, lv_obj_get_width(parent), lv_obj_get_height(parent));
        lv_obj_set_pos(lvgl_clock_style2_data.cont_main, 0, -(lv_obj_get_height(parent)));

        lv_obj_set_click(lvgl_clock_style2_data.cont_main, true); //启用 / 禁用可点击
        lv_obj_set_drag(lvgl_clock_style2_data.cont_main, true);//启用/禁用对象可拖动
        lv_obj_set_drag_throw(lvgl_clock_style2_data.cont_main, true);//启用/禁用拖动后是否有惯性移动
        lv_obj_set_drag_parent(lvgl_clock_style2_data.cont_main, false); //启用 / 禁用父对象可拖动
        lv_obj_set_drag_dir(lvgl_clock_style2_data.cont_main, LV_DRAG_DIR_HOR);//设置拖动方向
        lv_obj_add_style(lvgl_clock_style2_data.cont_main, LV_OBJ_PART_MAIN, &lvgl_style.cont_no_border);
        lv_obj_set_event_cb(lvgl_clock_style2_data.cont_main, lvgl_clock_style2_event_cb);
        //----创建容器----//

#if USE_WIN

        lvgl_clock_style2_data.sec = 21;
        lvgl_clock_style2_data.min = 1;
        lvgl_clock_style2_data.hour = 9;
#endif



        lvgl_clock_style2_data.label_time = lv_label_create(lvgl_clock_style2_data.cont_main, NULL);
        lv_obj_set_pos(lvgl_clock_style2_data.label_time, 0, 0);
        lv_label_set_long_mode(lvgl_clock_style2_data.label_time, LV_LABEL_LONG_EXPAND);//循环滚动
        lv_obj_set_size(lvgl_clock_style2_data.label_time, lv_obj_get_width(lvgl_clock_style2_data.cont_main),lv_obj_get_height(lvgl_clock_style2_data.cont_main));
        lv_label_set_recolor(lvgl_clock_style2_data.label_time, true);
        lv_label_set_align(lvgl_clock_style2_data.label_time, LV_LABEL_ALIGN_CENTER);
        lv_label_set_recolor(lvgl_clock_style2_data.label_time, true);
        lv_label_set_text(lvgl_clock_style2_data.label_time, "20 46");
        lv_obj_add_style(lvgl_clock_style2_data.label_time, LV_OBJ_PART_MAIN, &lvgl_style.font80_white_bg);
        lv_obj_align(lvgl_clock_style2_data.label_time, NULL, LV_ALIGN_CENTER, 0, 0);

        memset(lvgl_clock_style2_data.p_buf,0x00,100);
        sprintf(lvgl_clock_style2_data.p_buf,"%02d  %02d",lvgl_clock_style2_data.hour,lvgl_clock_style2_data.min);
        lvgl_clock_style2_set_time(lvgl_clock_style2_data.p_buf);


        lvgl_clock_style2_data.image1 = lv_img_create(lvgl_clock_style2_data.cont_main, NULL);
        lv_img_set_src(lvgl_clock_style2_data.image1, &img_clock_0001);
        lv_obj_set_pos(lvgl_clock_style2_data.image1, 0, 0);
        lv_obj_align(lvgl_clock_style2_data.image1, NULL, LV_ALIGN_CENTER, 0, 0);


        lvgl_task_create(&lvgl_clock_style2_data.task,lvgl_clock_style2_task_cb, 500, LV_TASK_PRIO_HIGH, NULL);

        lvgl_clock_style2_debug("create win");
    }
    else
    {
        lvgl_clock_style2_debug("show win");
    }
    lvgl_clock_style2_set_style(lvgl_clock_style2_data.style_num);
    lv_obj_move_background(lvgl_clock_style2_data.cont_main);
    lvgl_set_obj_show(&lvgl_clock_style2_data.cont_main);

    lvgl_clock_style2_anim_in_start(0, 0);


}
void lvgl_clock_style2_set_time(char* data)
{

    lv_label_set_text(lvgl_clock_style2_data.label_time, data);
    lv_obj_align(lvgl_clock_style2_data.label_time, NULL, LV_ALIGN_CENTER, 0, 0);
}
void lvgl_clock_style2_set_style(int data)
{
    switch(data)
    {
        case 0:

            lv_obj_add_style(lvgl_clock_style2_data.label_time, LV_OBJ_PART_MAIN, &lvgl_style.font80_white_bg);
            lv_obj_align(lvgl_clock_style2_data.label_time, NULL, LV_ALIGN_CENTER, 0, 0);

            lv_img_set_src(lvgl_clock_style2_data.image1, &img_clock_0001);
            lv_obj_align(lvgl_clock_style2_data.image1, NULL, LV_ALIGN_CENTER, 0, 0);



        break;
        case 1:
            lv_obj_add_style(lvgl_clock_style2_data.label_time, LV_OBJ_PART_MAIN, &lvgl_style.font_clock_style2_white_bg);
            lv_obj_align(lvgl_clock_style2_data.label_time, NULL, LV_ALIGN_CENTER, 0, 0);

            lv_img_set_src(lvgl_clock_style2_data.image1, &img_clock_0002);
            lv_obj_align(lvgl_clock_style2_data.image1, NULL, LV_ALIGN_CENTER, 0, -5);
        break;
        case 2:
            lv_obj_add_style(lvgl_clock_style2_data.label_time, LV_OBJ_PART_MAIN, &lvgl_style.font_clock_style3_white_bg);
            lv_obj_align(lvgl_clock_style2_data.label_time, NULL, LV_ALIGN_CENTER, 0, 0);

            lv_img_set_src(lvgl_clock_style2_data.image1, &img_clock_0003);
            lv_obj_align(lvgl_clock_style2_data.image1, NULL, LV_ALIGN_CENTER, 5, 0);
        break;

    }
}




void lvgl_clock_style2_hidden(void)
{

}

void lvgl_clock_style2_close(void)
{
    lvgl_clock_style2_debug("close");
    lvgl_group_remove_obj(&lvgl_clock_style2_data.cont_main);

    lvgl_task_delete(&lvgl_clock_style2_data.task);

    lvgl_obj_clean(&lvgl_clock_style2_data.cont_main);
    lvgl_obj_del(&lvgl_clock_style2_data.cont_main);


    if(lvgl_clock_style2_data.close_num == 0)
    {
        lvgl_desktop_create(lv_scr_act());
    }else
    if(lvgl_clock_style2_data.close_num == 1)
    {
        system_set_clock_style(0);
        lvgl_clock_create(lv_scr_act());
    }else
    if(lvgl_clock_style2_data.close_num == 2)
    {
        lvgl_clock_style2_create(lv_scr_act());
    }
}







